# 输出目录与可执行文件名
OUT_DIR := bin
OUT := $(OUT_DIR)/client

# 源码与目标文件
SRC_DIR := src
INCLUDE_DIR := include
SRCS := $(wildcard $(SRC_DIR)/*.c)
OBJS := $(patsubst $(SRC_DIR)/%.c, $(SRC_DIR)/%.o, $(SRCS))

# 编译器与选项
CC := gcc
CFLAGS := -Wall -g -I$(INCLUDE_DIR)
LDFLAGS := -lpthread -lcrypt -lssl -lcrypto

# 删除命令
RM := rm -rf

# 默认目标
.PHONY: ALL clean rebuild
ALL: $(OUT)

# 链接
$(OUT): $(OBJS)
	$(CC) $(OBJS) -o $@ $(CFLAGS) $(LDFLAGS)

# 编译
$(SRC_DIR)/%.o: $(SRC_DIR)/%.c
	$(CC) -c $< -o $@ $(CFLAGS)

# 清理
clean:
	$(RM) $(OUT) $(OBJS)

# 重建
rebuild: clean ALL

